package es.ucm.is.www.GUI.client.register;

import java.util.ArrayList;
import java.util.Date;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.Widget;

import es.ucm.is.www.GUI.client.panels.ErrorPanel;
import es.ucm.is.www.GUI.client.profile.GridProfile;

/**
 * <p>Title: BotonTick.java </p>
 *
 * <p>Description: Clase que realiza las comprobaciones de los campos del registro cunado se
 * pulsa el boton asociado </p>
 *
 * <p>Copyright: Enrique Lopez Manas, Carlos Jimenez Barral</p>
 *
 * @author Enrique Lopez Manas
 * @author Carlos Jimenez Barral
 * @version 1.0
 * @see
 */ 

public class BotonTick extends Button {
	
	ArrayList<String> t;
	/**
	 * @param t ArrayList con los textos introducidos en los campos del registro
	 */
	
	/**
	 * <p>Description: Constructora que crea el boton </p>
	 * @param s Nombre del boton
	 * 
	 */
	public BotonTick(String s) {
		super(s);
	}

	
	/**
	 * <p>Description: Metodo que realiza la comprobacion sobre los campos del registro </p>
	 * @param a ArrayList que contiene los textos de registro introducidos inicialmente
	 * @return true si todos los campos son correctos y false si hay alguno incorrecto
	 */
	public boolean validar(ArrayList a) {
		t=new ArrayList<String>();
		System.out.println("Entro en validar");
		//El arrayContiene GridProfile;
		final GridRegister g=(GridRegister)a.get(0);
		boolean valido=true;
		for (int i=0;i<6;i++) {
			if (i==3) {
				
				if (((RegisterPass)g.getPanel().getWidget(3, 1)).isValido()) {
					if (!((RegisterPass)g.getPanel().getWidget(3, 1)).getText().equalsIgnoreCase(((RegisterPass)g.getPanel().getWidget(4, 1)).getText())) {
						valido=false;
						((RegisterPass)g.getPanel().getWidget(3, 1)).setValido(false);
						((RegisterPass)g.getPanel().getWidget(3, 1)).okX();
						((RegisterPass)g.getPanel().getWidget(4, 1)).setValido(false);
						((RegisterPass)g.getPanel().getWidget(4, 1)).okX();
					}
					else {
						t.add(((RegisterPass)g.getPanel().getWidget(3, 1)).getText());
					}
				}
				i++;
			}
			else if (i==5) {
			} else	{
				final RegisterText rt=((RegisterText)g.getPanel().getWidget(i, 1));
				if (rt.isValido()) {
					switch (i) {
					case 0: {
						t.add(rt.getText());
						break;
					}
					case 1: {
						t.add(rt.getText());
						break;
					}
					case 2: {
				    	  UserGUI usuario=new UserGUI();
				    	  usuario.setUsername(rt.getText());
				    	  RegisterServiceAsync serv = (RegisterServiceAsync) GWT.create(RegisterService.class);
				  			ServiceDefTarget endpoint = (ServiceDefTarget) serv;
				  			endpoint.setServiceEntryPoint(GWT.getModuleBaseURL() + "servletRegister");
				  			AsyncCallback<Boolean> callback = new AsyncCallback<Boolean>(){

				  				public void onFailure(Throwable caught) {
				  					// TODO Auto-generated method stub
				  					ErrorPanel err = new ErrorPanel("Error al conectar con el servidor...");
				  					err.show();
				  				}

				  				public void onSuccess(Boolean result) {
				  					// TODO Auto-generated method stub
				  					if(result){
				  						rt.setValido(false);
										rt.okX();
				  					}
				  					else {
				  						rt.setValido(true);
										rt.okX();
				  					}
				  				}
				  				
				  			};
							serv.checkUser(usuario, callback);
						break;
					}
					case 4: {
						t.add(rt.getText());
						break;
					}
					case 5: {
						String texto=rt.getText();
						int d=texto.indexOf("@");
						if (d==-1) {
							valido=false;
							rt.setValido(false);
							rt.okX();
						}
						else {
							int p=texto.indexOf(".",d);
							if (p==-1||p<=d+1) {
								valido=false;
								rt.setValido(false);
								rt.okX();
							}
							else {
								t.add(rt.getText());	
							}
						}
						break;
					}
						
					}
				}
				else {
					valido=false;
				}		
			}
		}
		System.out.println("Valido es "+valido);
		return valido;
		
	}
	
	public boolean validar2(ArrayList a) {
		t=new ArrayList<String>();
		System.out.println("Entro en validar");
		final GridProfile g=(GridProfile)a.get(0);
		boolean valido=true;
		for (int i=0;i<g.getI();i++) {
			if (i==3) {
				
				if (((RegisterPass)g.getPanel().getWidget(3, 1)).isValido()) {
					if (!((RegisterPass)g.getPanel().getWidget(3, 1)).getText().equalsIgnoreCase(((RegisterPass)g.getPanel().getWidget(4, 1)).getText())) {
						valido=false;
						((RegisterPass)g.getPanel().getWidget(3, 1)).setValido(false);
						((RegisterPass)g.getPanel().getWidget(3, 1)).okX();
						((RegisterPass)g.getPanel().getWidget(4, 1)).setValido(false);
						((RegisterPass)g.getPanel().getWidget(4, 1)).okX();
					}
					else {
						t.add(((RegisterPass)g.getPanel().getWidget(3, 1)).getText());
					}
				}
				i++;
			}
			else if (i==5) {
			} else	{
				final RegisterText rt=((RegisterText)g.getPanel().getWidget(i, 1));
				if (rt.isValido()) {
					switch (i) {
					case 0: {
						t.add(rt.getText());
						break;
					}
					case 1: {
						t.add(rt.getText());
						break;
					}
					case 2: {
				    	  UserGUI usuario=new UserGUI();
				    	  usuario.setUsername(rt.getText());
				    	  RegisterServiceAsync serv = (RegisterServiceAsync) GWT.create(RegisterService.class);
				  			ServiceDefTarget endpoint = (ServiceDefTarget) serv;
				  			endpoint.setServiceEntryPoint(GWT.getModuleBaseURL() + "servletRegister");
				  			AsyncCallback<Boolean> callback = new AsyncCallback<Boolean>(){

				  				public void onFailure(Throwable caught) {
				  					// TODO Auto-generated method stub
				  					ErrorPanel err = new ErrorPanel("Error al conectar con el servidor...");
				  					err.show();
				  				}

				  				public void onSuccess(Boolean result) {
				  					// TODO Auto-generated method stub
				  					if(result){
				  						rt.setValido(false);
										rt.okX();
				  					}
				  					else {
				  						rt.setValido(true);
										rt.okX();
				  					}
				  				}
				  				
				  			};
							serv.checkUser(usuario, callback);
						break;
					}
					case 4: {
						t.add(rt.getText());
						break;
					}
					case 5: {
						String texto=rt.getText();
						int d=texto.indexOf("@");
						if (d==-1) {
							valido=false;
							rt.setValido(false);
							rt.okX();
						}
						else {
							int p=texto.indexOf(".",d);
							if (p==-1||p<=d+1) {
								valido=false;
								rt.setValido(false);
								rt.okX();
							}
							else {
								t.add(rt.getText());	
							}
						}
						break;
					}
						
					}
				}
				else {
					valido=false;
				}		
			}
		}
		System.out.println("Valido es "+valido);
		return valido;
		
	}

	public ArrayList<String> gett() {
		return t;
	}
	
}
